/*题目：编写一个程序，该程序将一个位数不够4的倍数的二进制数值字符串左边补零，使之
成为一个完整的可按照4个十六进制位分隔的十六进制数值字符串。
输入样例1：
1111111
输出样例1：
0111 1111
输入样例2：
101001
输出样例2：
0010 1001
输入样例3：
11100001
输出样例3：
1110 0001
*/
#include<stdio.h>
#include<string.h>
char *s_gets(char* st, int n);
void preZeros(char binStr[], int n);
int main()
{
    int n = 0;
    int i = 0;
    char binstr[8];
    s_gets(binstr,8);
    while (binstr[i] != '\0')
    {
        n++;
    }
    
    preZeros(binstr, n);
    
    
}
void preZeros(char binStr[], int n)
{
    int group_number = 0;
    if (n % 4 != 0 )
    {
        group_number = n / 4 + 1;
        int zeros = group_number * 4 - n;
        char newstr[group_number * 4 + 1];
        for (int i = 0; i < zeros; i++)
        {
            newstr [i] = '0';
        }
        strcat(newstr, binStr);
        for (int i = 0; i < group_number; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                printf("%c", newstr[i * 4 + j]);
            }
            printf(" ");
        }
        
    }
    else
    {
        for (int i = 0; i < group_number; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                printf("%c", binStr[i + j]);
            }
        }
        printf(" ");
    }
}

char *s_gets(char* st, int n)
{
    char * ret_val;
    int i = 0;

    ret_val = fgets (st, n ,stdin);
    if (ret_val)
    {
        while (st[i] != '\n' && st[i] != '\0')
            i++;
        if (st[i] == '\n')
           st[i] = '\0';
        else
           while (getchar() != '\n')
               continue;

    }
    return ret_val;
}
